BioJulia系列-FMIndexes bioinformatics, biojulia, doc, julia 一些基础知识 原文戳我 FM-index 是经典的静态、紧凑且快速的全文检索索引方式。 该包提供一个FMIndex{w,T}类型, 用来索引任意字节序列,其中: w是对序列字母表编码所需的位数; T是序列位置的类型; julia using FMIndexes fmindex = FMIndex("abracadabra") count("abra", fmindex) # count 函数获取匹配次数 locate("ra", fmindex) # locate 函数返回一个迭代器 localteall("ra", fmindex) # 类似于locate() |> collect # 取回index对应的序列: restore函数 String(restore(fmindex)) julia 高效索引技巧 FMIndex(seq, σ=256; r=32, program=:SuffixArrays, mmap::Bool=false, opts...) seq: 要建索引的byte序列,seq[i]应该返回UInt8类型; σ: 记录序列的字母表大小, 如果DNA, 设置为4, 设置过大只会浪费时间和空间; r: 序列的位置采样的长度, r越小, 定位速度越快, 但索引越大; program: 设置建索引的程序, 默认使用SuffixArrays.jl包, 如果需要建索引的序列很长,建议使用 pSAscan程序; mmap: 设置是否将后缀数组存储在内存中, 对于长序列的索引需要设置; 一些基础知识 后缀数组 后缀数组(sa): 后缀子字符串的排序; 名次数组(rk): 后缀数组的排序; 一个不考虑性能的实现,用来表示后缀数组的定义: julia seq = "aabaaaab" suf = [seq[i:end] for i in 1:length(seq)] sa = sortperm(suf) # 后缀数组 rk = sortperm(sa) # 名次数组 julia